package rabbitmq.simple;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

public class ProducerDemo {
    public static void main(String[] args) throws IOException, TimeoutException {
//        1. 建立连接
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("120.27.158.101");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("study");
        connectionFactory.setPassword("study");
        connectionFactory.setVirtualHost("study");
        Connection connection = connectionFactory.newConnection();

//        2. 开启信道
        Channel channel = connection.createChannel();

//        3. 声明交换机  此处使用默认的交换机

        // 4. 声明队列
        /**
         * queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
         * 参数说明：
         * - queue：队列名称
         * - durable：是否持久化队列（队列重启后仍然存在）
         * - exclusive：是否独占队列（仅限本连接使用，连接断开时自动删除）
         * - autoDelete：是否自动删除队列（最后一个消费者断开连接时自动删除）
         * - arguments：队列的其他属性参数（如 TTL、长度限制等）
         **/
        channel.queueDeclare("Hello, RabbitMQ!",true,false,false,null);

        // 5. 发送消息到队列
        /**
         * basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)
         * 参数说明：
         * - exchange: 交换机名称
         * - routingKey: 路由键，默认交换机时应与队列名称一致
         * - props: 属性配置
         * - body: 消息内容，字节数组形式
         **/
        for (int i = 0;i< 10;i++) {
            String message = "Hello, RabbitMQ-Study!"+i;
            channel.basicPublish("","Hello, RabbitMQ!",null,message.getBytes(StandardCharsets.UTF_8));
            System.out.println("Hello, RabbitMQ!");
        }

        //    6. 关闭资源
        channel.close();
        connection.close();
    }
}
